package com.example.petcare.service.serviceImpl;

import com.example.petcare.exception.NoValueException;
import com.example.petcare.mapper.ProviderMapper;
import com.example.petcare.pojo.HostDemand;
import com.example.petcare.pojo.Provider;
import com.example.petcare.pojo.User;
import com.example.petcare.service.ProviderService;
import com.example.petcare.utils.Md5Util;
import com.example.petcare.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Map;


@Service
public class ProviderServiceImpl implements ProviderService {

    @Autowired
    private ProviderMapper providerMapper;

    // 根据用户名查询用户
    @Override
    public Provider findByUsername(String username) {
        Provider p= providerMapper.findByUsername(username);// 根据用户名查询用户,用p来接收查询结果

        return p;
    }

    // 注册
    @Override
    public void register(String username, String password) {
        // 加密密码
        String md5String= Md5Util.getMD5String(password);// 调用Md5Util工具类的getMD5String方法,将密码加密

        providerMapper.add(username, md5String);// 调用userMapper的add方法,将用户名和加密后的密码传入
    }

    // 更新商家信息
    @Override
    public void update(Provider provider) {

        Integer providerId = provider.getProviderId();

        // 检查是否有未完成的订单，如果有，不允许修改信息
        Integer count = providerMapper.checkOrder(providerId);
        if(count > 0){
            throw new NoValueException("有未完成的订单，不允许修改信息");
        }

        provider.setUpdateTime(LocalDateTime.now()); // 设置更新时间


        // 如果是管理员，就不用设置providerStatus和rejectStatus,因为是自己审核自己
        if(providerId!=0){
            // 将providerStatus和rejectStatus设置为false
            provider.setProviderStatus(false);
            provider.setRejectStatus(false);
        }


        // 判断provider中的数据是否为空，如果为空，抛出异常
        if(provider.getProviderName() == null || provider.getProviderEmail() == null || provider.getProviderPhone() == null || provider.getProviderAddress() == null || provider.getProviderPic() == null){
            throw new NoValueException("商家信息不完整");
        }


        providerMapper.update(provider);// 调用userMapper的update方法,传入user对象
    }

    // 更新密码
    @Override
    public void updatePwd(String newPwd) {
        Map<String,Object> map = ThreadLocalUtil.get();// 从ThreadLocal中获取用户信息


        Integer id = (Integer) map.get("ProviderId");// 从map中获取用户id
        // 如果是管理员，上面就获取不到providerId，所以再获取一次
        if(id == null){
            id = (Integer) map.get("AdminId");
        }

        System.out.println("这是从map中拿到的id:"+id);

        providerMapper.updatePwd(Md5Util.getMD5String(newPwd),id);// 调用userMapper的updatePwd方法,传入加密后的新密码和用户id
    }



}
